% SUBJECT: OS-CLI Doku, 27.2.1991 (Version 1.0u) % Zeichensatzwahl: % \rm : computer modern roman style, % normaler Text % \sf : sans serif style, % Environmentvariablen sowie Produktbezeichnungen (z.B. ST) % \tt : type writer style, % Pfade, Dateinamen, Beispiele (eingegeben Befehle, Ausgaben) % \em : emphasized bzw. italics style, % Variablen in Syntaxbeschreibung, sowie allg. hervorheben \documentstyle[titlepage,german]{article} \pagestyle{headings} \parindent0em \parskip2ex plus0.5ex minus0.5ex \newcommand{\bsl}{$\backslash$} %\sloppy % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \begin{document} % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \title{ Der Kommandozeileninterpreter\\ Version 1.0u} \author{ Oliver Scholz} \date{ Februar 1991} \maketitle \newpage % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \pagenumbering{roman} \tableofcontents\clearpage \newpage \pagenumbering{arabic} % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{In eigener Sache} Lieber Benutzerin, lieber Benutzer! Das vorliegende Programm ist {\em SHAREWARE}. Das bedeutet, da\ss\ es weiterkopiert werden kann und soll! Man kann es allen seinen Freunden weitergeben und die wieder ihren Freunden u.s.w. Es d"urfen aber nur {\bf alle} Dateien komplett kopiert werden, d.h. \begin{tabular}{l|l} {\tt COMMAND.PRG} & Ausf"uhrbare Programmdatei\\ {\tt COMMAND.TEX} & \LaTeX{}-Version dieser Anleitung\\ {\tt COMMAND.TXT} & ASCII-Version dieser Anleitung\\ {\tt REVISION.TXT} & Entwicklungsgeschichte\\ \end{tabular} Es darf in den Dateien nichts ver"andert werden! Ausgenommen sind Layout\-"anderungen beim Ausdruck der Textdateien. Auf Wunsch kann bei mir auch noch eine englische "Ubersetzung der Textdateien bestellt werden. Wer das Programm benutzt sollte mir 30~DM "uberweisen, als Anerkennung f"ur meine M"uhe. Damit werdet ihr automatisch registrierter Benutzer und k"onnt euch bei auftretenden Problemen und Fragen schriftlich an mich wenden. Registrierte Benutzer bekommen jederzeit gegen eine formatierte 3,5" Diskette und einen selbstadressierten, frankierten R"uckumschlag die neueste Version. Ohne mein (schriftliches) Einverst"andnis darf das Programm nicht in einen Public Domain Vetrieb aufgenommen werden. Denn wer f"ur ein Programm schon 10--15 DM plus Porto und Nachnahme bezahlt hat, sieht nicht ein, sich auch noch f"ur 30 DM registrieren zu lassen. Dieses Programm ist im Laufe von eineinhalb Jahren entstanden und ich habe unz"ahlige Stunden daran gearbeitet. Darum m"ochte ich darum bitten, mir obigen Betrag auch zu "uberweisen, wenn ihr mit diesem Programm arbeitet. Das Programm ist zu 100\% in Assembler geschrieben. Das erkl"art seine Geschwindigkeit, aber auch seine Kompaktheit. Schlie\ss{}lich sind "uber 60 Befehle eingebaut, d.h.~es fallen bei diesen Befehlen keine Ladezeiten Und nicht jeder hat 2 oder 4 Megabytes und will davon "uber 100 KB f"ur eine riesige, langsame Shell verbraten, nur weil diese in C geschrieben ist und sich enorme Hashtables anlegt. Der CLI ist unter 32K lang und reserviert sich auch nicht viel mehr. Nur einige KBytes f"ur die Alias und Environments. Mein Dank gilt hier Marcus, der diese Anleitung ge\TeX{}t und auch sonst mit konstruktiver Kritik nicht gespart hat. Den Assembler, mit dem der CLI geschrieben ist, habe ich auch selbst entwickelt, und wenn das Sharewarekonzept klappt, mache ich den auch zu Shareware. Also noch ein Grund, sich registrieren zu lassen. Helft mit, das Sharewarekonzept zu einem Erfolg zu machen, wie in den USA. Meine Bankverbindung: \begin{center} \parbox{5cm}{Postgiroamt 2000 Hamburg\\ Bankleitzahl 200 100 20\\ Kontonummer 3457 42-203} \end{center} Vergesst bitte nicht, euren Namen, Adresse und das Stichwort CLI mit auf das "Uberweisungsformular zu schreiben, sonst wei\ss\ ich nicht, woher das Geld gekommen ist. Ihr k"onnt das Geld auch in einen Umschlag stecken: \begin{center} \parbox{5cm}{Oliver Scholz\\ Garstedter Weg 226\\ Postfach 61 02 29\\ 2000 Hamburg 61} \end{center} Meine Telefonnummer gebe ich am besten gar nicht erst an, weil ich ohnehin fast nie zuhause bin, und auch nicht morgens um sieben schon von den ersten Leuten aus dem Bett geholt werden m"ochte. Bitte versteht das. Fast h"atte ich's vergessen: {\sc Disclaimer / Haftungsausschluss}: Das Programm wurde sorgf"altig entwickelt und getestet. Trotzdem sind, wie es bei Software "ublich ist, Fehler nicht auszuschlie\ss{}en. Der Autor sieht sich daher gezwungen, darauf hinzuweisen, da\ss\ weder Garantie f"ur das fehlerfreie Funktionieren dieses Programmes "ubernommen werden kann, noch f"ur irgendwelche Sch"aden, die aus Fehlern im Programm oder durch Fehlbedienung entstehen, gehaftet wird. Mit dem Starten des Programmes werden diese Bedingungen anerkannt. So, und jetzt viel Spass mit dem Programm. Hamburg im Dezember 1990 \hfill {\sl Oliver Scholz} \newpage % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Einleitung} Neben dem {\sf GEM}-Desktop stellt ein Kommandozeileninterpreter (im folgenden kurz CLI, f"ur {\em command line interpreter}\/ genannt) eine weitere M"oglichkeit dar, mit dem {\sf ST} zu kommunizieren. Hierbei werden die Kommandos nicht mit der Maus angew"ahlt, sondern die Befehle mit Namen eingegeben. Es werden dabei zwei verschiedene Arten von Befehlen unterschieden: Residente und nichtresidente Befehle. Die residenten Befehle sind im CLI eingebaut, d.h.~sie stehen nach dem Laden unmittelbar zur Verf"ugung. Nichtresidente Befehle dagegen befinden sich auf Diskette bzw.~Festplatte und werden erst von dort geladen. Der Vorteil dabei ist, da\ss\ Befehle, die der CLI nicht enth"alt, selbst geschrieben werden k"onnen, und somit der CLI quasi erweitert werden kann. Ein weiterer Vorteil eines CLI ist die M"oglichkeit Batchdateien abzuarbeiten, d.h.~festgelegte Kommandofolgen mit einem Befehl abarbeiten zu lassen. Die Benutzung der, vom {\sf TOS} unterst"utzten, Environmentvariablen ist beim Arbeiten mit dem Desktop leider nicht m"oglich. Dies ist schade, denn sie bieten dem Benutzer u.a.~die M"oglichkeit seine pers"onliche Benutzerumgebung besser zu strukturieren. Ein weiterer Vorteil eines CLI ist also, da\ss\ eben diese Environmentvariablen problemlos definier- und ansprechbar sind. \newpage % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Das Arbeiten mit dem CLI} Auch wenn zwischen residenten und nichtresidenten Befehlen unterschieden wird, ist dieser Unterschied f"ur den Benutzer kaum merklich. Erst wenn die Diskette bzw. Festplatte anl"auft, merkt man, da\ss\ ein Befehl nichtresident ist. Nach dem Starten meldet sich der CLI mit dem sogenannten Prompt, der z.B.~so aussehen k"onnte: `\verb"C:>"'. Wann immer der CLI einen Prompt ausgibt, ist er bereit einen Befehl entgegenzunehmen. Dieser Prompt kann aber auch umdefiniert werden. Siehe dazu Abschnitt \ref{prompt}. Eine Kommandozeile besteht aus einem Befehl und optionalen Parametern, die voneinander durch ein oder mehrere Leerzeichen getrennt sind. Zun"achst testet der CLI, ob es sich bei dem Befehl um einen residenten Befehl handelt. Ist das der Fall, so wird der Befehl sofort ausgef"uhrt. Handelt es sich jedoch um einen nicht eingebauten Befehl, so wird auf dem aktuellen Verzeichnis nach einer Datei gleichen Namens gesucht, und diese geladen. Wurde keine Extension angegeben, so versucht der CLI zun"achst die Extension {\tt .PRG}, dann der Reihe nach {\tt .TOS}, {\tt .TTP}, {\tt .APP} und schlie\ss{}lich {\tt .BAT}. Hatte keiner dieser Versuche Erfolg, so wird die Meldung \begin{verbatim} Command or File not found! \end{verbatim} ausgegeben. Ist die Environmentvariable {\sf PATH} vorhanden, so werden auch die darin angegebenen Pfade durchsucht, bevor die Meldung ausgegeben wird. Gro\ss - /Kleinschreibung spielt bei der Befehlseingabe "ubrigens keine Rolle. % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \subsubsection{Die HOME--Abk"urzung in Pfaden} Das Tilde--Zeichen (`$\sim$') in einem Pfad steht f"ur das Homedirectory des jeweiligen Benutzers. Der CLI ersetzt dieses Zeichen also durch den Inhalt der Environmentvariablen {\sf HOME}. Zum Beispiel: \begin{verbatim} cp tst.txt ~\txt\ \end{verbatim} w"are gleichbedeutend mit \begin{verbatim} cp tst.txt $HOME\txt\ \end{verbatim} oder, wenn {\sf HOME}$=$e:\bsl usr\bsl olav\bsl , auch \begin{verbatim} cp tst.txt e:\usr\olav\txt\ \end{verbatim} % ~~~~~~~~~~~~~~~ \subsection{Wildcards und Dateinamen unter {\sf TOS}}\label{wildcards} Wenn im folgenden von {\em wildcards}\/ die Rede ist, so ist damit die M"oglichkeit gemeint, Dateinamen unvollst"andig zu spezifizieren. Einzelne Zeichen in Dateinamen k"onnen gegen ein Fragezeichen (`{\tt ?}') und ganze Zeichenketten durch einen Stern (`\verb"*"') ersetzt werden. Dabei besteht ein Dateiname aus 8~Zeichen plus 3~optionalen, durch einen Punkt getrennten Zeichen, auch Extension genannt. Also beispielsweise {\tt filename.ext}. Es ist jedoch zu beachten, wie die beiden Wildcard-Zeichen von {\sf TOS} interpretiert werden. Wird in einem Dateinamen ein Stern verwendet, so f"ullt {\sf TOS} bis zum Punkt mit Fragezeichen auf, d.h.~alle Zeichen nach einem Stern bis zum Punkt werden ignoriert! Besondere Vorsicht bei der Verwendung von Wildcards ist also bei L"osch/-operationen geboten. Fatale Folgen k"onnte folgende Anweisung haben: \begin{verbatim} rm *abc.* \end{verbatim} {\sf TOS} interpretiert dies als \begin{verbatim} rm *.* \end{verbatim} Was das bedeuten kann, ist wohl jedem klar. Also Vorsicht!!! % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Batchdateien} Eine Batchdatei dient dazu, eine oft benutzte Befehlsfolge zu automatisieren. Soll z.B.~die Befehlsfolge \begin{verbatim} date time \end{verbatim} zusammen ausgef"uhrt werden, so schreibt man mit einem Editor eine Textdatei, die in der ersten Zeile {\tt date} und in der zweiten Zeile {\tt time} enth"alt. Nennt man diese Datei z.B.~{\tt DATETIME.BAT}, so wird bei Eingabe von {\tt datetime.bat} \linebreak automatisch die Befehlsfolge {\tt date time} ausgef"uhrt. Es ist auch m"oglich, einer Batchdatei max.~10 Parameter zu "ubergeben. Die Parameter werden in der Kommandozeile durch Leerzeichen voneinander getrennt. Der erste Parameter hei\ss{}t \%1, der zweite \%2, u.s.w.~und der zehnte \%0. Taucht in der Batchdatei dann \%1 auf, so wird \%1 durch den Parameter in der Kommandozeile ersetzt. Soll das `\%' dargestellt werden, so wird es einfach verdoppelt: \%\%. Lautet die Batchdatei {\tt TEST.BAT} etwa: {\tt echo \%1}, so bewirkt die Kommandozeile {\tt test Hallo}, da\ss\ auf dem Bildschirm `{\tt Hallo}' ausgegeben wird. Mit Batchdateien lassen sich z.B.~Compiler- /Linkerl"aufe automatisieren: \begin{verbatim} compiler %1.c %1.o linker %1.prg=startup,%1.o,lib \end{verbatim} Wird diese Batchdatei {\tt C.BAT} genannt, so bewirkt {\tt c test}, da\ss\ die Befehlsfolge \begin{verbatim} compiler test.c test.s linker test.prg=startup,test.o,lib \end{verbatim} abgearbeitet wird. Als besonderer Clou kann der CLI auch selbst eine Kommandozeile "ubernehmen. Diese kann dann z.B.~der Name einer Batchdatei sein, die nach dem Starten des CLI automatisch abgearbeitet wird. Damit ist es vom Desktop aus z.B.~m"oglich, {\tt COMMAND.PRG} als Anwendung anzumelden, und zwar mit der Extension {\tt .BAT}. Wird dann {\tt C.BAT} doppelt angeklickt, so startet der CLI automatisch und arbeitet die entsprechende Batchdatei ab. Wird keine Kommandozeile angegeben, so sucht der CLI nach einer Batchdatei {\tt AUTOEXEC.BAT}, die, sofern vorhanden, ebenfalls automatisch abgearbeitet wird. In dieser Datei kann man den CLI nach eigenen W"unschen konfigurieren. Des weiteren ist es m"oglich, rekursive Batchdateien zu verwenden, d.h.~eine Batchdatei kann eine weitere Batchdatei aufrufen, aber maximal f"unf Mal. Dabei kann auf Parameter "ubergeordneter Batchdateien zugegriffen werden. % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Ein- /Ausgabe Umleitung} Die Ausgabe aller eingebauten Befehle erfolgt normalerweise auf den Bildschirm, aber es kann manchmal gew"unscht sein, Ausgaben auf den Drucker oder in eine Datei auszugeben. Dazu wird an das Ende der eigentlichen Kommandozeile `\verb">"{\em dateiname\/}' angef"ugt. Damit wird eine Datei {\em dateiname\/} angelegt und die Ausgabe des Befehls in diese Datei geschrieben. Als Dateiname sind hier auch {\tt AUX:} und {\tt PRN:} zul"assig. Damit kann die Ausgabe auch auf den Drucker bzw.~die serielle Schnittstelle umgelenkt werden. Ist die Datei {\em dateiname}\/ schon vorhanden, so wird sie gel"oscht, und eine neue Datei er"offnet. Soll an eine bestehende Datei angeh"angt werden, so wird statt `\verb">"{\em dateiname}' der Befehl `\verb">>"{\em dateiname\/}' an die Kommandozeile angeh"angt. Es ist auch m"oglich die Eingabe von einer Datei vorzunehmen. Dazu wird an die Kommandozeile `\verb"<"{\em dateiname}' angeh"angt. Hier ist wieder auch {\tt AUX:} zugelassen, nicht aber {\tt PRN:}. Benutzt ein Programm die Fehlerausgabe (stderr), so kann auch diese umgeleitet werden, und zwar mit `\verb"2>"{\em dateiname}' bzw. `\verb"2>>"{\em dateiname}'. Hier sind ebenfalls {\tt AUX:}, {\tt PRN:} und {\tt CON:} zul"assig. Allerdings funktioniert die I/O-Umlenkung nicht bei allen {\sf TOS}-Versionen fehlerfrei. Erst ab {\sf TOS} Version 1.4 klappt alles fehlerfrei. % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Pipes} Eine Pipe ist ein sehr angenehmes Mittel zur Kommunikation zwischen verschiedenen Programmen. Oft ist es gew"unscht, die Ausgabe eines Programmes mit einem anderen Programm weiterzuverarbeiten. Eine Pipe gibt die Ausgabe, die ein Programm oder Befehl auf den Bildschirm (eigentlich `stdout') schreiben will, an ein anderes Programm weiter, das diese Ausgabe als Eingabe akzeptiert. Eine Pipe ist also eine Art gleichzeitige Ausgabe- und Eingabeumlenkung mit verschiedenen Programmen. Das Zeichen, das diese Umlenkung vornimmt, ist der senkrechte Strich (`\verb"|"'). Soll z.B.~die Fehlerliste eines C-Compilers auf eine Datei umgelenkt werden, so kann diese recht lang werden, und meist h"angt ein Gro\ss{}teil der Fehler vom ersten Fehler ab. So kann man die Ausgabe durch eine Pipe an HEAD schicken, der nur die ersten paar Fehlermeldungen ausgibt: \begin{verbatim} compiler | head -25 \end{verbatim} So schreibt der Compiler nur noch die ersten 25 Fehlermeldungen auf den Bildschirm. Man kann diese Ausgabe nun weiter in eine Datei umlenken: \begin{verbatim} compiler | head -25 >errors \end{verbatim} Nun enth"alt `errors' die ersten 25 Fehlermeldungen. Sollen die Fehlermeldungen nur seitenweise ausgegeben werden und der Compiler h"alt nicht an, so kann die Ausgabe an MORE geschickt werden: \begin{verbatim} compiler | more \end{verbatim} Nun erfolgt die Ausgabe seitenweise, als h"atte man: \begin{verbatim} compiler >temp more temp del temp \end{verbatim} eingegeben. Damit diese Umleitung funktioniert mu\ss\ die Ausgabe die in eine Pipe geschickt werden soll nat"urlich auch umlenkbar sein, d.h.~das Programm mu\ss\ seine Ausgaben auf `stdout' machen. Sollen mehrere Befehle in einer Kommandozeile ausgef"uhrt werden, ohne da\ss\ eine Pipe ge"offnet wird, so m"ussen diese jeweils durch Semikolon getrennt werden. % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Die Befehls Stopuhr} Wird eine Kommandozeile mit einem {\em Klammeraffen\/} (`\verb"@"') begonnen, so wird eine interne Stopuhr gestartet und die Zeit zur Ausf"uhrung der Zeile gestoppt. So kann bequem bestimmt werden, wie lange z.B.~ein Compiliervorgang dauert. % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Die History-Funktion} Der CLI merkt sich immer die letzten 20 Befehlszeilen, und diese k"onnen "uber die Cursortasten (auf/ab) wieder abgerufen werden. Das ist sinnvoll, wenn man einen zuvor benutzten Befehl noch einmal benutzen m"ochte, ohne ihn neu eingeben zu m"ussen. Diese Befehle k"onnen auch ggf.~editiert werden. Eine weitere M"oglichkeit, die letzten Befehle zu sehen und auszuf"uhren, ist der Befehl HISTORY. Damit werden die letzten Befehle ausgegeben und jeweils mit einer Nummer versehen. Mittels Ausrufezeichen k"onnen diese Befehle nun angesprochen werden, und zwar auf zwei verschiedene Arten: \begin{enumerate} \item `{\tt !5}', w"urde z.B.~den 5.~Befehl ausf"uhren, der nach Starten des CLIs eingegeben wurde, sofern sich dieser Befehl noch im History-Puffer befindet. \item `{\tt !cc}' w"urde den letzten Befehl, der mit `cc' beginnt und sich noch im History-Puffer befindet, ausf"uhren. \end{enumerate} % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Editieren der Kommandozeile} Eingegebene Zeichen werden dort eingef"ugt, wo sich der Cursor befindet. Sind noch Zeichen rechts vom Cursor, so werden diese Zeichen nach rechts verschoben. Die Befehle, die zum Editieren der Kommandozeile zur Verf"ugung stehen, zeigt Tabelle \ref{cliedit}. Eine genauere Erl"auterung verlangt wohl die Dateinamensuche: Es ist manchmal ganz hilfreich, dem Rechner die Suche nach einem komplizierten Dateinamen zu "uberlassen. Dazu gibt man eine unvollst"andige Dateinamenspezifikation an und dr"uckt entweder die Insert-Taste oder die Tastenkombination Ctrl-U ({\em unknown\/}). Nun durchsucht der CLI das aktuelle Verzeichnis nach dem ersten Eintrag, der auf die angegebene Spezifikation pa\ss{}t und gibt ihn auf dem Schirm aus. Ist dies nicht der gew"unschte Eintrag, so kann man die Suche mit der Tastenkombination Ctrl-O ({\em other\/}) fortf"uhren. Kann kein weiterer Eintrag mehr gefunden werden, so bleibt der letzte gefundene Eintrag in der Kommandozeile stehen. Da das links vom Cursor stehende Wort als Suchspezifikation benutzt wird, bewirkt zweimaliges Dr"ucken der Insert-Taste bzw.~Ctrl-U, da\ss\ der erste gefundene Dateiname mit dem zweiten Dr"ucken als, nun vollst"andige, Suchspezifikation interpretiert wird. Dadurch wird i.d.R.~bei weiterer Suche mittels Ctrl-O kein anderer Dateiname mehr gefunden. Folgendes Beispiel soll diese sinnvollen Befehle verdeutlichen: Oft m"ochte man eine Datei l"oschen, will aber nicht den gesamten Namen eingeben. Angenommen, das aktuelle Verzeichnis enth"alt die folgenden Dateien: \begin{verbatim} BLAH.TXT BLAH1.TXT BLAH2.TXT \end{verbatim} Gesetzt den Fall, man m"ochte {\tt BLAH1.TXT} l"oschen. Nun reicht es beispielsweise aus, wenn man folgende Kommandozeile eingibt (ohne die {\sf RETURN} Taste zu bet"atigen): \begin{verbatim} del bl \end{verbatim} Dr"uckt man nun die Insert-Taste (oder Ctrl-U), so w"urde die unvollst"andige Spezifikation {\tt bl} durch {\tt BLAH.TXT} ersetzt werden. (In diesem Fall w"are ein Leerzeichen als Spezifikation auch ausreichend gewesen) F"uhrt man die Suche nun mit Ctrl-O fort, so wird als n"achstes {\tt BLAH.TXT} durch die gesuchte Datei {\tt BLAH1.TXT} ersetzt und man kann die erw"unschte Kommandozeile durch Bet"atigung der {\sf RETURN} Taste an den CLI weitergeben. "Ahnlich l"a\ss{}t sich diese Suche auch bei anderen Befehlen anwenden. Auf vielfachen Wunsch wird der gefundene Dateiname ab Version 1.0t in Kleinbuchstaben eingef"ugt. \begin{table} \begin{center} \renewcommand{\arraystretch}{2} \begin{tabular}{|l|l|}\hline Taste & Wirkung\\ \hline Pfeil links & bewegt den Cursor nach links\\ Pfeil rechts & bewegt den Cursor nach rechts\\ Backspace & l"oscht das Zeichen links vom Cursor\\ Delete & l"oscht das Zeichen unter dem Cursor\\ Insert & Starte Dateinamensuche\\ Clr/Home & l"oscht die aktuelle Kommandozeile\\ Ctrl-K & l"oscht bis zum Ende der Kommandozeile\\ Ctrl-W & l"oscht das n"achste Wort\\ Ctrl-A & springt an den Anfang der Kommandozeile\\ Ctrl-E & springt an das Ende der Kommandozeile\\ Ctrl-U & wie Insert ({\em unknown\/})\\ Ctrl-O & N"achster Eintrag bei Dateinamensuche ({\em other\/})\\ Ctrl-D & wie Delete\\ Ctrl-X & wie Clr/Home\\ Ctrl-B & wie Pfeil links ({\em backwards\/})\\ Ctrl-F & wie Pfeil rechts ({\em forwards\/})\\ Ctrl-P & wie Pfeil hoch ({\em previous\/})\\ Ctrl-N & wie Pfeil runter ({\em next\/})\\ \hline \end{tabular} \renewcommand{\arraystretch}{1} \end{center} \caption{\label{cliedit} Befehle zum Editieren der Kommandozeile} \end{table} \pagebreak % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Environmentvariablen} Das Betriebssystem {\sf TOS} erm"oglicht es, sogenannte Environmentvariablen zu "ubergeben. In diesen Variablen k"onnen z.B.~Suchpfade oder andere Systemeinstellungen gespeichert werden. So kann bei manchen C-Compilern festgelegt werden, wo sich die Include-Dateien befinden. Eine Environmentvariable wird definiert, indem ihr ein neuer Inhalt zugewiesen wird. Ist sie schon vorhanden, wird der vorhandene Inhalt gel"oscht und durch den neuen Inhalt ersetzt. Nach dem Starten existiert in der Regel nur eine Variable, n"amlich {\sf PATH}. Diese Variable legt fest, wo der CLI nichtresidente Befehle sucht, wenn er sie im aktuellen Verzeichnis nicht findet. Der CLI legt nun zu dieser vom {\sf TOS} belegten Variable einige weitere Variablen an, und zwar {\sf HOME}, {\sf CWD}, {\sf STATUS}, {\sf DATE}, {\sf TIME} und u.U.~{\sf USERNAME} und {\sf USER}. In {\sf HOME} wird das Verzeichnis vermerkt, in dem der CLI gestartet wurde. In {\sf CWD} befindet sich immer das aktuelle Verzeichnis ({\em current working directory}\/), und in {\sf STATUS} wird der Exit-Code des letzten gestarteten Programmes vermerkt. {\tt STATUS=\ -33} z.B.~bedeutet, da\ss\ die angegebene Datei nicht gefunden wurde. {\sf DATE} und {\sf TIME} enthalten nach Aufruf der Befehle DATE bzw.~TIME unter Angabe der \mbox{`-s'} Option, das Systemdatum bzw.~die Systemzeit zum Zeitpunkt des Aufrufes. {\sf USER} wird von der LOGIN-Funktion angelegt und in Abschnitt \ref{login} erl"autert. Es ist nun praktisch, alle ausf"uhrbaren externen Befehle in einen Ordner zu kopieren, und dem CLI diesen Pfad mitzuteilen. Befindet sich dieser Ordner nun z.B.~im Wurzelverzeichnis von Laufwerk {\tt C:} und hei\ss{}t {\tt BIN}, so bewirkt \begin{verbatim} PATH=C:\,C:\BIN\ \end{verbatim} da\ss\ nichtresidente Befehle zun"achst im aktuellen Verzeichnis, dann im Wurzelverzeichnis von {\tt C:} und dann im Ordner {\tt BIN} auf Laufwerk {\tt C:} gesucht wird. Bei der {\sf PATH} Variable k"onnen auch mehrere Pfade angegeben werden, diese m"ussen dann durch Kommata getrennt werden. Variablen k"onnen aber auch in Befehlen verwendet werden. Um den Inhalt einer Variablen zu benutzen, wird ihr ein Dollar-Zeichen (`\$') vorangestellt, mit \begin{verbatim} TEMP=$CWD \end{verbatim} speichert man das aktuelle Verzeichnis in der Variablen {\sf TEMP} ab. Zu einem sp"ateren Zeitpunkt kann dann mit \begin{verbatim} cd $TEMP \end{verbatim} wieder in dieses Verzeichnis gelangen. (Eine einfachere M"oglichkeit, sich ein Directory zu merken, bieten die Befehle PUSHD/POPD). Weitere M"oglichkeiten bieten auch die Befehle PRINTENV, SETENV und ADDENV. Das Plus-Zeichen (`$+$') erm"oglicht es, mit diversen Befehlen auf konkatenierte Environmentvariablen zuzugreifen. Ein Beispiel sollte erkl"aren, was damit gemeint ist: \begin{verbatim} del $HOME+$MYFILE \end{verbatim} l"oscht die Datei, die in {\sf MYFILE} enthalten ist, auf dem Pfad, der in HOME steht. D.h., die Inhalte der Variablen {\sf HOME} und {\sf MYFILE} werden aneinandergeh"angt und von der Kommandozeile "ubernommen. % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Benutzung des CLI durch Programme} Der CLI unterst"utzt auch die {\sf GEMDOS}-Variable {\sf \_shell\_p} bei Adresse {\sf \$4F6}, hexadezimal. Dadurch wird es m"oglich, da\ss\ ein Programm das vom CLI aufgerufen wurde, dem CLI eine Kommandozeile zur Ausf"uhrung "ubergibt. Ein Beispiel daf"ur ist der {\sf system()} Befehl einiger C-Compiler. Schreibt man z.B.~ein MAKE-Programm so mu\ss\ man nicht den RM Befehl abfangen, sondern schickt ihn einfach mittels {\sf system()} an den CLI, und l"a\ss t ihn dort ausf"uhren. \newpage % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Der CLI und MiNT} Der CLI erkennt die Anwesenheit von MiNT im Speicher und ber"ucksichtigt das bei einigen Befehlen; so werden UID und GID beim Login automatisch gesetzt. Der VER Befehl erkennt die MiNT Version und gibt sie mit aus. DIR akzeptiert die Pseudolaufwerke {\sf Q:}, {\sf V:} und {\sf X:}. WAIT benutzt den {\sf S\_Yield()} Systemcall. Als neuer Befehl gibt PS die Proze"stabelle aus. Schlie"slich wird Multitasking unterst"utzt, indem ein Programm im Hintergrund gestartet wird, wenn das erste Zeichen einer Zeile das `\&' Zeichen ist. % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Das ARGV-Schema} Der CLI unterst"utzt das neue ARGV-Protokoll, um Programmen u.a.~den Zugriff auf den eigenen Namen zu erm"oglichen ({\sf ARGV[0]}). Leider vertragen sich einige Programme nicht mit dem neuen Protokoll. Daher kann man es mit einer neuen Environment Variablen ein- und ausschalten. Ist die Variable {\sf N127} vorhanden, so ist das ARGV Protokoll eingeschaltet. Der zugewiesene Wert ist dabei gleichg"ultig. Ist sie nicht vorhanden, so wird das Protokoll nicht unterst"utzt. % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \section{Die Befehle} Hier sollen nun die einzelnen eingebauten Befehle des CLI vorgestellt und erl"autert werden. % ~~~~~~~~~~~~~~~ \subsection{ADDENV} Syntax: ADDENV {\em varname} {\em string} Mit ADDENV kann an eine Environmentvariable etwas angeh"angt werden. {\em varname\/} ist dabei der Name der Variable, und {\em string}\/ wird (durch ein Komma getrennt) and den Inhalt der Variable angeh"angt. Ein Beispiel: \begin{verbatim} addenv PATH $HOME \end{verbatim} Nun w"urde auch das {\sf HOME}-Verzeichnis mit in die Suche nach externen Befehlen einbezogen. % ~~~~~~~~~~~~~~~ \subsection{ALIAS} Syntax: ALIAS [\ [-d]\ {\em string1\/} {\em string2\/} ] Mit ALIAS kann man die Zeichenkette {\em string2}\/ der Zeichenkette {\em string1} zuweisen. D.h.,~ gibt man nach einer ALIAS-Zuweisung, nach obiger Syntax, in der Kommandozeile {\em string1}\/ ein, so versucht der CLI {\em string2}\/ auszuf"uhren. So bewirkt z.B. \begin{verbatim} alias d dir \end{verbatim} da\ss\ `d' als Befehl erkannt wird und wie der DIR-Befehl wirkt. Wird die `-d' ({\em delete}\/) Option angegeben, so wird die entsprechende Zeichenkette aus der Alias-Liste entfernt. \begin{verbatim} alias -d d \end{verbatim} macht also die eben gemachte Zuweisung r"uckg"angig. Wird ALIAS ohne Parameter angegeben, wird die Liste der definierten Befehle ausgegeben. % ~~~~~~~~~~~~~~~ \subsection{BAUD} Syntax: BAUD {\em baudrate},{\em word\_size},{\em parity},{\em stop\_bits} Mit dem BAUD-Befehl kann die serielle Schnittstelle des {\sf ST} (RS-232) konfiguriert werden. Zun"achst wird die Baudrate angegeben, dann die Anzahl der Datenbits, gefolgt von der Parit"at (n,o,e f"ur: none, odd, even Parit"at) und schlie\ss{}lich die Anzahl der Stopbits. Mit: \begin{verbatim} baud 300,8,n,1 \end{verbatim} wird also z.B. die Schnittstelle auf 300 Baud, keine Parit"at, 8 Datenbits und ein Stopbit eingestellt. % ~~~~~~~~~~~~~~~ \subsection{CD oder CHDIR} Syntax: CD [{\em pathname\/}]\ oder CHDIR [{\em pathname\/}] Mit CD ({\em change directory\/}) wird ein neues aktuelles Verzeichnis gew"ahlt. Normalerweise wird der angegebene Ordnername an den aktuellen Pfad angeh"angt. Die Abk"urzung `..' bezieht sich auf das n"achste "ubergeordnete Verzeichnis. Ist der aktuelle Pfad z.B.~{\tt C:\bsl TEMP\bsl COMP\bsl } und wird das Kommando `{\tt cd ..}' eingegeben, so wechselt das aktuelle Verzeichnis auf {\tt C:\bsl TEMP\bsl }. Es kann aber auch ein kompletter neuer Pfad eingegeben werden, z.B.~`{\tt cd e:\bsl }' oder `{\tt cd a:\bsl test\bsl }'. Wird kein Parameter angegeben, so wechselt CD in das {\sf HOME}-Verzeichnis. Der CLI bietet hier dem Benutzer die M"oglichkeit, Pfadnamen mittels Wildcards anzugeben. Es werden einfach die signifikanten Zeichen eines Pfadnamens, gefolgt vom Asterisken--Zeichen (`$\ast$') angegeben. Der CLI erg"anzt dann zum vollst"andigen Pfadnamen. Angenommen das aktuelle Verzeichnis sei {\tt C:\bsl } und es gibt ein Unterverzeichnis {\tt \bsl SOURCE\bsl }, in welches man wechslen m"ochte. Dann w"urde man vielleicht folgenden Befehl verwenden: \begin{verbatim} cd sou* \end{verbatim} Damit wird der CLI in das Verzeichnis \verb"C:\SOURCE\TEST\" wechseln. % ~~~~~~~~~~~~~~~ \subsection{CHMOD} Syntax: CHMOD [$+\mid-$] [r$\mid$h$\mid$s$\mid$a ] {\em filename} Mit diesem Befehl k"onnen die Dateiattribute ver"andert werden, "ahnlich wie LOCK/UNLOCK etc. Jedes einzelne Attribut kann mit einem Befehl gezielt gesetzt oder gel"oscht werden, z.B.: \begin{verbatim} chmod +r-sh test.txt \end{verbatim} setzt das {\em read-only\/} Attribut und l"oscht die {\em system\/} und {\em hidden\/} Attribute, und wirkt so wie \begin{verbatim} lock test.txt hide test.txt \end{verbatim} % ~~~~~~~~~~~~~~~ \subsection{CLICK} Syntax: CLICK [ON$\mid$OFF] CLICK OFF schaltet den Tastaturklick ab, CLICK ON schaltet ihn wieder ein. % ~~~~~~~~~~~~~~~ \subsection{CLS} Syntax: CLS Der Befehl CLS ({\em clear screen\/}) l"oscht den Bildschirm. Es werden dazu die Terminalsequenzen eines {\sf DEC} VT-52 Terminals verwendet (also: ESC--H--ESC--J). % ~~~~~~~~~~~~~~~ \subsection{COPY oder CP} Syntax: \parbox[t]{6cm}{ COPY \hfill [-ns]\ {\em pathname}\/ [{\em pathname\/}] \linebreak CP \hfill [-ns]\ {\em pathname}\/ [{\em pathname\/}]} \parbox[t]{2cm}{oder} Mit dem Befehl COPY, bzw.~CP kann eine Kopie einer Datei in einem an\-deren Verzeichnis oder Laufwerk angelegt werden. Hierbei sind Wildcards erlaubt. Ist im Zielpfad bereits eine Datei gleichen Namens vorhanden, fragt der CLI nach, ob diese gel"oscht werden soll, oder ob man die Kopieranweisung abbrechen will. Wird kein Zielpfad angegeben, so ist der aktuelle Pfad Zielpfad der Operation. Das Dateidatum bleibt hierbei erhalten. Um die Kopie mit dem aktuellen Systemdatum zu versehen, siehe TOUCH Befehl. Einige Beispiele: \begin{description} \item[{\tt COPY $\ast$.TXT A:\bsl}] \ \\ kopiert alle Dateien, die auf {\tt .TXT} enden aus dem aktuellen Verzeichnis auf Laufwerk {\tt A:} \item[{\tt COPY $\ast$.TXT C:\bsl $\ast$.DOC}]\ \\ kopiert alle Dateien, die auf {\tt .TXT} enden auf Laufwerk C und benennt sie gleichzeitig in {\tt .DOC} um. \item[{\tt COPY HALLO.TXT TEST.DOC}]\ \\ legt eine Kopie der Datei {\tt HALLO.TXT} an und nennt sie {\tt TEST.DOC.} \end{description} Mit der Option `-n' ({\em no query\/}) wird die Nachfrage abgeschaltet, ob eine im Zielpfad schon vorhandene Datei gleichen Namens "uberschrieben werden soll oder nicht. Die Option \mbox{`-s'} ({\em silent\/}) bewirkt, da\ss\ der Kopiervorgang nicht auf dem Schirm mitprotokolliert wird. % ~~~~~~~~~~~~~~~ \subsection{CTTY} Syntax: CTTY {\em device} Mit dem Befehl CTTY ({\em change TTY\/}) wird dem CLI mitgeteilt, da\ss\ nun alle Ausgaben und Eingaben der internen Befehle "uber die serielle Schnittstelle ({\em device\/} ist dann {\tt AUX:}) oder "uber dir Konsole ({\em device\/} ist dann {\tt CON:}) abgewickelt werden sollen. Damit ist der CLI fernbedienbar ({\em remote modus\/}). Bei Betrieb "uber die serielle Schnittstelle wird ab Version 1.0t weiterhin die Ausgabe auf den Bildschirm ausgegeben. Der Remotebetrieb ist dabei von der Konsole aus abbrechbar. % ~~~~~~~~~~~~~~~ \subsection{DATE} Syntax: DATE [-s] Mit dem DATE Befehl kann das Systemdatum abgefragt und gestellt werden. Nach Eingabe von DATE wird das aktuelle Datum ausgegeben. Nun kann ein neues Datum eingegeben werden. Wird stattdessen ein ung"ultiges Datum angegeben oder einfach nur die {\sf RETURN}-Taste bet"atigt, bleibt das Datum unver"andert. Bei Angabe der \mbox{`-s'} Option ({\em set\/}) wird das aktuelle Datum im Format \vskip.1cm \centerline{\em Wochentag\tt , \em Tag\tt . \em Monat \em Jahr} in die Environmentvariable {\sf DATE} geschrieben. % ~~~~~~~~~~~~~~~ \subsection{DEL} Syntax: DEL [-qs]\ \{{\em filename\/}\} L"oscht die angegebene Datei. Es k"onnen auch Wildcards (`\verb"*"' oder `\verb"?"') angegeben werden, aber dabei ist Vorsicht geboten! Man l"oscht sich nur allzuleicht Daten, die man nicht l"oschen wollte! So l"oscht \begin{verbatim} del *.prg \end{verbatim} alle Dateien im aktuellen Verzeichnis, die die Extension `{\tt .PRG}' besitzen. Siehe hierzu auch unbedingt Abschnitt \ref{wildcards}. Gibt man jeden Namen einzeln an und/oder nutzt die `-q' Option ({\em query}, Nachfrage), geht man auf Nummer sicher. DEL und seine Equivalente RM und ERA geben eine englische Meldung aus, was gel"oscht wird. Ist diese englische Meldung in einer Batchabarbeitung st"orend, so kann diese auch mit der \mbox{`-s'} Option ({\em silent\/}) unterdr"uckt werden. % ~~~~~~~~~~~~~~~ \subsection{DELENV} Syntax: DELENV {\em varname} Mit diesem Befehl kann die Environmentvariable {\em varname\/} gel"oscht werden. Dieser Befehl stellt also das Komplement zu SETENV dar. % ~~~~~~~~~~~~~~~ \subsection{DIR} Syntax: DIR [-aepw]\ [{\em pathname\/}] Der Inhalt des angegebenen Pfades, oder, wenn kein Pfad angegeben ist, der Inhalt der aktuellen Directories wird ausgegeben. Normalerweise werden Dateien, bei denen das {\em hidden\/}- oder {\em system\/}-Attribut gesetzt ist, nicht mit ausgegeben. Wird jedoch die `-a' Option ({\em all\/}) angegeben, so werden auch diese Dateien mit ausgegeben. Mit der `-e' Option ({\em extended\/}) werden auch die Attribute {\em read-only\/}, {\em system\/} und {\em hidden\/} mit ausgegeben. Ist das Attribut gesetzt, so erscheint der Buchstabe `r',`h' oder `s' und wenn das Attribut gel"oscht ist, erscheint ein `-'. Mit der `-p' Option ({\em pause\/}) wird auf einen Tastendruck gewartet, sobald eine volle Seite ausgegeben wurde. Mit der `-w' Option ({\em wide\/}) werden 6 Dateinamen pro Zeile ausgegeben, daf"ur aber ohne L"ange, Datum und Uhrzeit. % ~~~~~~~~~~~~~~~ \subsection{DUMP} Syntax: DUMP [-s{\em hexoffset\/}]\ {\em filename} Dieser Befehl gibt einen Hexdump der angegebenen Datei aus. Wird als Option ein Offset angegeben, so wird die Datei erst ab diesem Offset ausgegeben. Beispiel: \begin{verbatim} dump -s2E test.txt \end{verbatim} % ~~~~~~~~~~~~~~~ \subsection{ECHO} Syntax: ECHO [ON$\mid$OFF$\mid${\em string\/}] Die auf diesen Befehl folgende Zeile wird, normalerweise, auf dem Bildschirm ausgegeben. ECHO wird gerne in Batchdateien verwendet um Meldungen auf dem Bildschirm auszugeben. Man kann ihn aber auch dazu benutzen, um eine kleine Textdatei zu erstellen, und das geht so: Die erste Zeile der Batchdatei wird mit `\verb">"{\em dateiname}' in eine Datei umgeleitet. Alle weiteren Zeilen werden mit `\verb">>"{\em dateiname}' an die bestehende Datei angeh"angt. Dieses Verfahren ist allerdings ziemlich aufwendig und nur dann sinnvoll, wenn eine kleine Datei schnell erstellt werden soll und kein Texteditor zur Verf"ugung steht. Auch Sonderzeichen k"onnen mit ECHO ausgegeben werden. Dazu mu\ss\ anstelle des Sonderzeichens `\&{\em hh}' angegeben werden, wobei {\em hh\/} hierbei der Hexcode des Sonderzeichens ist. ECHO besitzt noch eine weitere Funktion. Mit ihr kann festgelegt werden, ob bei der Abarbeitung einer Batch-Datei die einzelnen Befehle ausgegeben werden oder nicht. Grundeinstellung ist ECHO OFF. Mit ECHO ON schaltet man die Ausgabe ein. Wird nur ECHO eingegeben, wird der aktuelle ECHO-Status abgefragt. % ~~~~~~~~~~~~~~~ \subsection{ERA} Syntax: ERA [-qs]\ \{{\em filename\/}\} Ist equivalent zu DEL. % ~~~~~~~~~~~~~~~ \subsection{EXIT} Syntax: EXIT Dieser Befehl beendet den CLI und kehrt zum aufrufenden Programm zur"uck, und das ist in der Regel das Desktop. % ~~~~~~~~~~~~~~~ \subsection{FKEY} Syntax: FKEY [-e]\ F{\em number\/}\ $=$\ {\em text} Mit diesem Befehl kann einer der 10 Funktionstasten ein maximal 19 Zeichen langer Text zugewiesen werden, der bei Bet"atigung der entsprechenden Taste dann ausgegeben wird. Beispiel: \begin{verbatim} fkey F4=Hallo Welt \end{verbatim} Die `-e' Option ({\em execute\/}) erm"oglicht es, "uber Funktionstasten direkt Programme oder Batches auszuf"uhren. Beispiel: \begin{verbatim} fkey -e F10=gem uniterm \end{verbatim} % ~~~~~~~~~~~~~~~ \subsection{FORMAT} Syntax: FORMAT [A:$\mid$B:]\ [-s$\mid$-d$\mid$-dh] [-v{\em volumename\/}]\ Es wird eine Diskette in Laufwerk {\tt A:} oder {\tt B:} formatiert. Die \mbox{`-s'} Option formatiert im Single-Sided (360K) Format und die `-d' Option im Double-Sided (720K) Format. Bei -dh wird die Diskette auf 1.44MB (Double sided, high density) formatiert, jedoch nur, wenn der {\sf ST} "uber ein HD-Laufwerk verf"ugt und entsprechend modifiziert worden ist. Die \mbox{`-v'} Option erm"oglicht es, der zu formatierenden Diskette den Namen {\em volumename\/} zu geben. Dies ist aber nachtr"aglich auch noch mit dem LABEL Befehl m"oglich. % ~~~~~~~~~~~~~~~ \subsection{FRE} Syntax: FRE [{\em drive\/}] Gibt den Namen, den verf"ugbaren sowie den bereits belegten Speicherplatz des aktuellen Laufwerks aus. Es ist auch m"oglich eine Laufwerksspezifikation {\em drive\/} anzugeben, z.B.: \begin{verbatim} fre d: \end{verbatim} w"urde Namen, verf"ugbaren und belegten Speicherplatz von Laufwerk {\tt D:} ausgeben. % ~~~~~~~~~~~~~~~ \subsection{GEM} Syntax: GEM {\em filename} Startet ein Programm, welches {\sf GEM}-Routinen benutzt. Es werden also der Mauszeiger eingeschaltet und der Bildschirm gel"oscht. {\em filename\/} sollte hierbei eine ausf"uhrbare Bin"ardatei sein. % ~~~~~~~~~~~~~~~ \subsection{HEAD} Syntax: HEAD [-anzahl] [{\em filename\/}] Gibt die ersten paar Zeilen einer Textdatei aus. Normalerweise werden die ersten 10 Zeilen ausgegeben. Mit dem Anzahl-Parameter kann jedoch eine beliebige Zeilenzahl eingestellt werden. Wird kein Dateiname angegeben, kann HEAD als Filter verwendet werden, d.h.~er bezieht seine Eingabe durch eine Pipe von einem anderen Programm. % ~~~~~~~~~~~~~~~ \subsection{HELP} Syntax: HELP Mit diesem Befehl wird eine "Ubersicht der CLI-Befehle ausgegeben. Ein Dr"ucken der {\sf HELP} Taste hat die gleiche Wirkung. % ~~~~~~~~~~~~~~~ \subsection{HIDE} Syntax: HIDE [-s] \{{\em filename\/}\} Bei den angegebenen Dateien werden die {\em hidden\/}- und {\em system\/}-Attribute gesetzt. Damit sind diese Dateien (in {\sf TOS}-Versionen ab Blitter-{\sf TOS}) vom Desktop aus nicht mehr sichtbar. Damit diese Dateien vom DIR Befehl erkannt werden, mu\ss\ beim DIR Befehl die `-a' Option angegeben werden. Die \mbox{`-s'} Option ({\em silent\/}) schaltet die Vollzugsmeldung ab. % ~~~~~~~~~~~~~~~ \subsection{HISTORY / !} Syntax: HISTORY / !{\em number\/} / !{\em string} Gibt die letzten 20 Befehle auf dem Bildschirm aus. Es ist nun m"oglich, einen der in der History gespeicherten Befehle anzuw"ahlen. Und zwar: \begin{description} \item[Cursortasten]\ \\ Mit den Cursortasten `Pfeil-hoch' und `Pfeil-runter' werden die im history-Puffer gespeicherten Befehle bei jedem Tastendruck in der Kommandozeile dargestellt und k"onnen dann editiert oder einfach noch einmal ausgef"uhrt werden. \item[direkte Wahl]\ \\ Die direkte Wahl bietet folgende zwei M"oglichkeiten: \begin{itemize} \item !{\em number\/} w"ahlt den Befehl an, der an der Stelle {\em number\/} im history-Puffer steht. Also beispielsweise \begin{verbatim} C:> history 1: dir 2: cp a:\hallo c:\ 3: history C:> !1 \end{verbatim} w"urde den Befehl DIR ausf"uhren. \item !{\em string\/} w"ahlt den ersten Befehl im history-Puffer an, der {\em string\/} als Teilwort enth"ahlt. Um bei obigem Beispiel zu bleiben, w"urde {\tt !cp} den Befehl Nummer~2 im history-Puffer ausf"uhren, also \begin{verbatim} cp a:\hallo c:\ \end{verbatim} \end{itemize} \end{description} % ~~~~~~~~~~~~~~~ \subsection{HSHAKE} Syntax: HSHAKE [XON$\mid$RTS$\mid$NONE] HSHAKE stellt das Protokoll der seriellen Schlittstelle des {\sf ST}'s ein. Wird kein Parameter oder NONE angegeben, so wird das Handshake abgeschaltet, bei XON schaltet der CLI den {\sf ST} auf XON/XOFF-Protokoll um, und bei RTS auf RTS/CTS, was aber leider in "alteren {\sf TOS}-Versionen nicht funktioniert. % ~~~~~~~~~~~~~~~ \subsection{IGNORE} Syntax: IGNORE {\em command} Mit dem IGNORE-Befehl kann man erzwingen, da\ss\ ein Befehl von Diskette bzw.~Festplatte geladen wird, auch wenn bereits ein eingebauter Befehl gleichen Namens vorhanden ist. \begin{verbatim} ignore dir \end{verbatim} w"urde bewirken, da\ss\ sich der CLI so verh"alt, als w"are der DIR-Befehl nicht eingebaut. Daraufhin sucht er dann die {\sf PATH}-Variable nach einem Programm namens {\tt DIR.TTP}, {\tt DIR.PRG} usw.~ab. Siehe dazu auch Abschnitt \ref{revive}. % ~~~~~~~~~~~~~~~ \subsection{INVERT} Syntax: INVERT Invertiert den Bildschirm, also wei\ss{}e Buchstaben auf schwarzem Grund und umgekehrt. % ~~~~~~~~~~~~~~~ \subsection{LABEL} Syntax: LABEL {\em volumename} Dem aktuellen Laufwerk wird der Name {\em volumename} gegeben. % ~~~~~~~~~~~~~~~ \subsection{LOCK} Syntax: LOCK [-s] \{{\em filename\/}\} Bei der angegebenen Datei wird das {\em read-only\/} Attribut gesetzt. Danach kann diese Datei nur noch gelesen, aber nicht mehr beschrieben werden. Die \mbox{`-s'} Option ({\em silent\/}) schaltet die Vollzugsmeldung ab. % ~~~~~~~~~~~~~~~ \subsection{LOGCNT} Syntax: LOGCNT Normalerweise bricht der CLI nach 3 Login-Versuchen ab und kehrt zu dem aufrufenden Programm zur"uck. Der {\sf LOGCNT} (Continuous Login) bewirkt, da\ss\ der Benutzer beliebig viele Versuche hat, sich zu identifizieren. Dadurch wird auch bei Fehlversuchen nicht zum aufrufenden Programm zur"uckgekehrt. Der CLI kann damit dazu dienen, den Computer `abzuschlie\ss{}en'; hierzu wird der CLI z.B.~so installiert, da\ss\ er nach dem Einschalten des Computers immer ausgef"uhrt wird und in {\tt autoexec.bat} der {\sf LOGCNT} Befehl, gefolgt von {\sf LOGIN} steht. Aber dann das Passwort nicht vergessen! % ~~~~~~~~~~~~~~~ \subsection{LOGIN}\label{login} Syntax: LOGIN Mit dem LOGIN Befehl ist es m"oglich, mehreren Benutzern eigene CLI-Um\-gebungen (also Environments) bereitzustellen. Dabei wird jedem Benutzer Benutzername, Passwort, voller Name und ein {\sf HOME} Directory zugewiesen. Diese Benutzerdaten werden in einer Datei {\tt PASSWD} festgelegt. Der CLI sucht diese Datei in dem Directory, welches in der Environmentvariablen {\sf LOGIN} angegeben ist. Bevor der Befehl LOGIN eingegeben wird, sollte also diese Variable entsprechend gesetzt werden. Nach Eingabe von LOGIN fordert der CLI zur Eingabe des Benutzernamen auf. Ist der Benutzername in der {\tt PASSWD}-Datei nicht eingetragen, so hat der Benutzer drei Versuche einen g"ultigen Benutzernamen einzugeben. Ist dies nicht geschehen, so wird der CLI beendet und zum aufrufenden Programm zur"uckgekehrt. Ist der Benutzer eingetragen, so wird nach dem Passwort gefragt. Ist kein Passwort vorhanden, gen"ugt Bet"atigung der {\sf RETURN}-Taste. Wurde das g"ultige Passwort eingegeben, so werden die Environmentvariablen {\sf USER} und {\sf HOME} entsprechend gesetzt, in das entsprechende {\sf HOME}-Directory gewechselt und dort die Datei {\tt LOGIN.BAT} ausgef"uhrt. Au\ss{}erdem wird die History gel"oscht. In der Datei {\tt LOGIN.BAT} kann sich so jeder Benutzer seine eigenen Voreinstellungen sichern. Aufbau der {\tt PASSWD}-Datei: \vskip.4cm \centerline{ {\em user},{\em password},{\em uid},{\em gid},{\em username}, {\em home\_directory}[,{\em default-shell}]\/ CR/LF} \vskip.2cm Ein neuer Usereintrag k"onnte dann etwa so aussehen: \nopagebreak \begin{verbatim} SuperUser,,0,0,Peter Meier,e:\super\,c:\command.prg \end{verbatim} Beim {\em user\/}, also dem Namen unter dem sich ein Benutzer eingelogged hat und welcher in der Environmentvariablen {\sf USER} gespeichert wird, wird Gro\ss{}- und Kleinbuchstaben unterschieden, ebenso beim {\em password\/}. Das Passwort wird verschl"usselt abgespeichert und kann nur mit dem PASSWD-Befehl ge"andert werden. {\em uid\/} und {\em gid\/} sind ganze Zahlen und werden vom CLI ignoriert, m"ussen aber aus Kompatibilit"atsgr"unden vorhanden sein. {\em username\/} ist der volle Benutzername, der in der Environmentvariablen {\sf USERNAME} gespeichert wird. Die Environmentvariable {\sf HOME} wird mit {\em home\_directory\/} belegt. Soll nach dem login nicht der CLI gestartet werden, sondern eine andere Shell oder ein anderes Programm, so kann noch optional {\em default-shell\/} angegeben werden. % ~~~~~~~~~~~~~~~ \subsection{LS} Syntax: LS [-aep]\ [{\em pathname\/}] Gleiche Funktion wie DIR, nur mit Voreinstellung Option `-w' gesetzt. % ~~~~~~~~~~~~~~~ \subsection{LTTY} Syntax: LTTY Der Befehl LTTY ({\em lock TTY\/}) erm"oglicht eine Verriegelung der Tastatur. Der Benutzer wird nach einem Passwort gefragt und mu\ss\ dieses dann zur Sicherheit noch einmal eingeben. Die Tastatur l"a\ss{}t sich nun nur noch durch Eingabe dieses Passwortes oder nat"urlich durch einen Reset des Rechners wieder entriegeln. % ~~~~~~~~~~~~~~~ \subsection{MAN} Syntax: MAN [{\em level\/}]\/ {\em command} Es wird die Datei \verb"command.*" aus einem der Verzeichnisse, welche in der Environmentvariablen {\sf MAN} gespeichert sind, ausgegeben. Man kann sich so also ein oder mehrere Directories mit Hilfstexten (ASCII-codiert) anlegen, die jeweils die Endung {\tt .MAN} tragen k"onnen. Wird dabei die optionale Zahl {\em level\/} angegeben, so sucht der CLI nach einer Extension, die mit dieser Zahl beginnt. Dabei darf sich {\em level\/} im Bereich null bis sieben bewegen. So k"onnte die Beschreibung f"ur den {\sf C}-Befehl {\sf strcpy()} etwa {\tt STRCPY.3C} hei\ss{}en. Dabei steht die 3 f"ur Level 3 und das `C' f"ur die Programmiersprache {\sf C}. Man k"onnte also den Utilities und anderen Programmen Level 1, den Betriebssystemaufrufen den Level 2 und Bibliotheksfunktionen verschiedener Programmiersprachen den Level 3 zuordnen, wobei der drei noch ein Kennbuchstabe f"ur die Programmiersprache nachgestellt wird. Manchmal kann es sinnvoll sein, mehrere Hilfstexte in einer Datei abzulegen, die aber unter verschiedenen Namen angesprochen werden soll. So k"onnte man alle Stringbefehle in einer Datei {\tt STRING.3C} ablegen. Nun soll diese Datei auch unter den Namen {\tt strcpy}, {\tt strcmp}, {\tt strcat} u.s.w.~angesprochen werden. Dazu wird eine Datei {\tt MAN.IDX} im Hilfstextdirectory angelegt, die pro Zeile einen Namen einer Datei zuordnet. Dabei beginnt eine Zeile mit dem Namen, unter dem die Datei angesprochen werden soll. Dann folgen ein oder mehrere Leerzeichen und schlie\ss{}lich der Dateiname. Die Datei k"onnte also z.B.~so aussehen: \begin{verbatim} strcpy string strcmp string strcat string fopen gemfile fcreate gemfile \end{verbatim} Eine solche Indexdatei kann in jedem der in der {\sf MAN} Environmentvariablen abgelegten Directories angelegt werden. Dabei bezieht sich jeder Dateiname auf das jeweilige Directory! Normalerweise wird die Textdatei durch den internen MORE Befehl ausgegeben. Es kann dazu jedoch auch z.B.~ein Programm benutzt werden. Dazu wird in der {\sf PAGER} Variablen der Name des Befehls abgelegt, der statt MORE die Datei ausgeben soll. % ~~~~~~~~~~~~~~~ \subsection{MFREE} Syntax: MFREE Dieser Befehl gibt den aktuell verf"ugbaren Hauptspeicherplatz aus. % ~~~~~~~~~~~~~~~ \subsection{MKDIR} Syntax: MKDIR {\em dirname} Um einen neuen Ordner {\em dirname\/} anzulegen verwendet man der MKDIR Befehl. \begin{verbatim} mkdir TEST \end{verbatim} legt einen Ordner mit Namen {\tt TEST} an. % ~~~~~~~~~~~~~~~ \subsection{MORE} Syntax: MORE \{{\em filename\/}\} MORE ist ein Ausgabebefehl, der Dateien seitenweise auf dem Bildschirm anzeigt, und ausgibt, wieviel Prozent der Datei schon ausgegeben sind. Mit der Taste `b' kann zur"uckgebl"attert werden, jede andere Taste bl"attert vorw"arts. Mit der Taste `n' wird, wenn mehrere Dateien ausgegeben werden sollen, die aktuelle Ausgabe abgebrochen und mit der n"achsten Datei fortgefahren. Mit Control-C oder `q' kann jederzeit die Ausgabe abgebrochen werden. Wird kein Dateiname angegeben, so liest MORE von `stdin', d.h.~es kann mit einer Pipe die Ausgabe eines Programmes als Eingabe von MORE verwendet werden. % ~~~~~~~~~~~~~~~ \subsection{MOVE oder MV} Syntax: \parbox[t]{6.1cm}{ MOVE \hfill [-ns]\ {\em pathname\/} [{\em pathname\/}] \linebreak MV \hfill [-ns]\ {\em pathname\/} [{\em pathname\/}]} \parbox[t]{2cm}{oder} Bewirkt exakt dasselbe wie COPY, jedoch wird die Quelldatei nach dem Kopiervorgang gel"oscht. Die Datei(en) werden also verschoben. Die Option \mbox{`-s'} ({\em silent\/}) bewirkt, da\ss\ dieser Vorgang nicht auf dem Schirm mitprotokolliert wird. % ~~~~~~~~~~~~~~~ \subsection{MS} Syntax: MS [ON$\mid$OFF] MS ON aktiviert den Mauszeiger. MS OFF ist das Komplement zu MS ON. % ~~~~~~~~~~~~~~~ \subsection{PASSWD} Syntax: PASSWD Mit diesem Befehl kann man sein Passwort "andern. Die Benutzerf"uhrung ist selbsterkl"arend. % ~~~~~~~~~~~~~~~ \subsection{PATH oder PWD} Syntax: PATH oder PWD Mit diesem Befehl wird das aktuelle Verzeichnis ausgegeben. % ~~~~~~~~~~~~~~~ \subsection{POPD} Syntax: POPD Ein Pfad wird vom Pfadstapel geholt und zum aktuellen Pfad gemacht. Siehe hierzu auch Abschnitt \ref{pushd}. % ~~~~~~~~~~~~~~~ \subsection{PRINTENV} Syntax: PRINTENV Gibt die Namen aller Environmentvariablen und ihren Inhalt auf dem Bildschirm % ~~~~~~~~~~~~~~~ \subsection{PROMPT}\label{prompt} Syntax: PROMPT [{\em string\/}] Nach dem Starten meldet sich der CLI normalerweise mit einem Prompt, der aus dem aktuellen Verzeichnis, und einem `$>$'-Zeichen aufgebaut ist ({\sf MS-DOS} l"asst gr"ussen). Mit dem PROMPT-Befehl kann nun dieser Prompt umdefiniert werden. Der angegebene {\em string\/} wird unver"andert als Prompt ausgegeben, bis auf einige speziellen Zeichenkombinationen, die in Tabelle \ref{prompts} aufgef"uhrt sind. \nopagebreak \begin{table} \begin{center} \begin{tabular}{lcl} \&n &:& aktuelles Laufwerk\\ \&p &:& aktueller Pfad\\ \&d &:& Datum\\ \&t &:& Zeit\\ \&v &:& Version\\ \&g &:& $>$\\ \&l &:& $<$\\ \&q &:& $=$\\ \&h &:& Backspace\\ \&\_ &:& CR/LF\\ \&e &:& Escape\\ \&\& &:& Ampersand-zeichen\\ \&m &:& Dollar (MONEY)-Zeichen\\ \&u &:& $|$\\ \&! &:& aktuelle Zeilennummer\\ \end{tabular} \end{center} \caption{\label{prompts} Sonderzeichen im Prompt} \end{table} Einige dieser Zeichen k"onnten nicht direkt eingegeben werden oder h"atten f"ur den CLI eine besondere Bedeutung, so w"urde das `$>$' als Umlenkung erkannt werden. Wenn daher im Prompt das `$>$' erscheinen soll, so wird an seiner Stelle `{\tt \&g}' im Promptstring eingegeben. \begin{verbatim} prompt &p&g \end{verbatim} wird immer der aktuelle Pfad, gefolgt vom `$>$'-Zeichen als Prompt ausgegeben. PROMPT ohne Argument stellt wieder den default Prompt ein, d.h.~so, wie er nach dem Einschalten war. % ~~~~~~~~~~~~~~~ \subsection{PUSHD}\label{pushd} Syntax: PUSHD [{\em pathname\/}] Bef"ordert den angegebenen Pfad auf den Pfadstapel. Der Pfadstapel fa\ss{}t max.~16 Pfade. Wird PUSHD ohne Argument aufgerufen, so wird der aktuelle Pfad abgelegt. % ~~~~~~~~~~~~~~~ \subsection{RENAME oder REN} Syntax: RENAME oder REN [-ns]\ {\em pathname\/} {\em filename} Mit diesem Befehl kann eine oder mehrere Dateien umbenannt werden. Ist schon eine Datei gleichen Namens vorhanden, so wird gefragt, ob diese gel"oscht werden soll, oder ob die Quelldatei nicht umbenannt werden soll. Beispiel: \begin{verbatim} rename *.txt *.doc \end{verbatim} "andert die Endungen aller {\tt .TXT} Dateien im aktuellen Verzeichnis in {\tt .DOC} um. Mit der Option `-n' ({\em no query\/}) wird die Nachfrage abgeschaltet, ob eine im Zielpfad schon vorhandene Datei gleichen Namens gel"oscht werden soll oder nicht. Die \mbox{`-s'} Option ({\em silent\/}) schaltet die Vollzugsmeldung ab. % ~~~~~~~~~~~~~~~ \subsection{REVIVE} \label{revive} Syntax: REVIVE {\em command} Mit diesem Befehl kann ein Befehl, der mit dem IGNORE-Befehl abgeschaltet wurde, wieder {\em zum Leben erweckt\/} werden. % ~~~~~~~~~~~~~~~ \subsection{RM} Syntax: RM [-qs]\ {\em filename\/} [{\em filename\/}] Siehe dazu DEL. % ~~~~~~~~~~~~~~~ \subsection{RMDIR} Syntax: RMDIR [-r$\mid$-a] {\em pathname} Mit diesem Befehl kann ein Ordner gel"oscht werden. Dabei mu\ss\ der Ordner mit komplettem Pfad angegeben werden. Der Order mu\ss\ im Normalfall leer sein. Ist sich der Benutzer sicher, da\ss\ ein kompletter Ordner gel"oscht werden soll, so kann er unter Angabe der Option `-r' ({\em recursive\/}) oder `-a' ({\em all\/}) jeden beliebigen Ordner l"oschen. % ~~~~~~~~~~~~~~~ \subsection{SETENV} Syntax: SETENV {\em varname\/} [{\em string\/}] Mit diesem Befehl kann einer Environmentvariablen ein neuer Inhalt, {\em string\/}, zugewiesen werden. Name und Inhalt sind dabei entweder durch ein Leerzeichen oder ein `$=$'-Zeichen getrennt. Man kann nat"urlich auch ohne SETENV einer Variablen einen Inhalt zuweisen. \begin{verbatim} setenv TEMP Hallo \end{verbatim} \begin{verbatim} TEMP=Hallo \end{verbatim} sind also vollkommen gleichwertig. Wird SETENV ohne Parameter aufgerufen, so werden alle vorhandenen Variablen ausgegeben (genau wie beim PRINTENV-Befehl). % ~~~~~~~~~~~~~~~ \subsection{SLEEP} Syntax: SLEEP Mit diesem Befehl l"asst sich der Bildschirm dunkelschalten. Dies ist sinnvoll, wenn man die Arbeit mit dem CLI f"ur l"angere Zeit unterbricht, aber den Rechner bzw. Monitor nicht abschalten m"ochte. Ein zuvor eingegebener SLEEP Befehl schont dann die Bildr"ohre des Monitors. Der Schirm wird durch Bet"atigen einer beliebigen Taste wieder eingeschaltet. % ~~~~~~~~~~~~~~~ \subsection{STEP} Syntax: STEP {\em step\_rate} Der STEP-Befehl stellt eine neue Steprate f"ur die beiden Laufwerke {\tt A:} und {\tt B:} ein. Erlaubte Werte f"ur {\em step\_rate\/} sind: 2, 3, 6 und 12. Die Angabe erfolgt in Millisekunden. % ~~~~~~~~~~~~~~~ \subsection{TEE} Syntax: TEE [-a] {\em filename} Der Inhalt einer Pipe wird in eine Datei {\em filename} abgezweigt, die Funktion der Pipe dadurch nicht beeintr"achtigt. Mit der `-a' Option wird an eine bestehende Datei angeh"angt. % ~~~~~~~~~~~~~~~ \subsection{TERM} Syntax: TERM TERM aktiviert den Terminalmodus. Dieser entspricht dem des von Atari gelieferten Emulator-ACC's, welches einen einfachen {\sf DEC} VT-52 Terminalemulator zur Kommunikation "uber die serielle Schnittstelle darstellt. Alle von der Tastatur eingegebenen Zeichen werden also an die serielle Schnittstelle gesendet. Ggf.~mu\ss\ die Baudrate mit dem BAUD-Befehl eingestellt werden. Nach dem Einschalten befindet sich der Rechner normalerweise im 9600 Baud Modus. Verlassen wird der Terminalmodus mit der {\sf HELP} oder {\sf UNDO} Taste. Bei Remotebetrieb ist der {\sf TERM} Befehl nicht sinnvoll, und ist daher deaktiviert. % ~~~~~~~~~~~~~~~ \subsection{TIME} Syntax: TIME [-s] Der TIME-Befehl dient dazu, die Systemzeit abzufragen oder zu stellen. Nach Eingabe des Befehls wird die aktuelle Zeit ausgegeben. Dann kann eine neue Zeit eingegeben werden. Ist die eingegebene Zeit ung"ultig oder wird einfach nur die {\sf RETURN}-Taste bet"atigt, so bleibt die urspr"ungliche Zeit unver"andert. Bei Angabe der \mbox{`-s'} Option ({\em set\/}) wird die aktuelle Zeit in die Environmentvariable {\sf TIME} geschrieben. % ~~~~~~~~~~~~~~~ \subsection{TOUCH} Syntax: TOUCH [-s] \{{\em filename\/}\} TOUCH aktualisiert das Dateidatum also, das Erstellungsdatum einer Datei. Die \mbox{`-s'} Option ({\em silent\/}) schaltet die Vollzugsmeldung ab. % ~~~~~~~~~~~~~~~ \subsection{TYPE} Syntax: TYPE {\em filename} Gibt die angegebene Datei aus. Die Ausgabe kann z.B.~in eine Datei umgelenkt werden (wie bei den meisten anderen Befehlen auch). % ~~~~~~~~~~~~~~~ \subsection{UNALIAS} Syntax: UNALIAS {\em name} Ein Eintrag wird aus der ALIAS-Liste entfernt. Bewirkt dasselbe wie ALIAS mit der `-d'-Option. % ~~~~~~~~~~~~~~~ \subsection{UNHIDE} Syntax: UNHIDE [-s] \{{\em filename\/}\} Bei den angegebenen Dateien werden die Attribute {\em hidden\/} und {\em system\/} gel"oscht. Die \mbox{`-s'} Option ({\em silent\/}) schaltet die Vollzugsmeldung ab. % ~~~~~~~~~~~~~~~ \subsection{UNLOCK} Syntax: UNLOCK [-s] \{{\em filename\/}\} Bei den angegebenen Dateien wird das {\em read-only\/} Attribut gel"oscht. Die \mbox{`-s'} Option ({\em silent\/}) schaltet die Vollzugsmeldung ab. % ~~~~~~~~~~~~~~~ \subsection{VERSION oder VER} Syntax: VERSION oder VER Gibt die Versionsnummer des CLI und {\sf TOS}-ROMs aus. % ~~~~~~~~~~~~~~~ \subsection{WAIT} Syntax: WAIT [-s$\mid$-t {\em time\/}$\mid$-d {\em date\/}] Dieser Befehl gibt eine englische Meldung aus und wartet auf Bet"atigung der {\sf RETURN}-Taste. WAIT wird sinnvollerweise nur in Batchdateien verwendet. Ist die englische Meldung in einer Batchabarbeitung st"orend, so kann diese auch mit der \mbox{`-s'} Option ({\em silent\/}) unterdr"uckt werden. Bei Angabe der \mbox{`-t'} bzw.~\mbox{'-d'} Option wartet der CLI bis zur angegebenen Uhrzeit bzw.~zum angegebenen Datum. Das Format ist dasselbe wie bei den Befehlen TIME und DATE. % ~~~~~~~~~~~~~~~ \subsection{WC} Syntax: WC [{\em filename\/}] Mit WC (Word Count) werden die Zeichen, Zeilen und Worte einer Textdatei gez"ahlt. Wird kein Dateiname angegeben, bezieht WC seine Eingabe von `stdin'. Damit kann WC seine Eingabe durch eine Pipe von einem anderen Programm beziehen. % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \end{document} # E O F #